]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Add more error checking to shadow-related code
authorJasper St. Pierre <jstpierre@mecheye.net>
Fri, 11 Mar 2011 20:29:15 +0000 (15:29 -0500)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 21 Mar 2011 22:25:42 +0000 (23:25 +0100)
The additional error checks should catch quite some warnings (e.g.
when trying to create a shadow for a 0-width actor).

src/st/st-label.c
src/st/st-private.c

index 53fd844b33aefbef2ac19942382b0cacec6e1614..1d9b13d0e2caaad722ac75828c5c6da123eac664 100644 (file)
@@ -243,10 +243,11 @@ st_label_paint (ClutterActor *actor)
           priv->text_shadow_material = material;
         }
 
-      _st_paint_shadow_with_opacity (shadow_spec,
-                                     priv->text_shadow_material,
-                                     &allocation,
-                                     clutter_actor_get_paint_opacity (priv->label));
+      if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+        _st_paint_shadow_with_opacity (shadow_spec,
+                                       priv->text_shadow_material,
+                                       &allocation,
+                                       clutter_actor_get_paint_opacity (priv->label));
     }
 
   clutter_actor_paint (priv->label);
index e265789ae580dcc53a44df28bec47da88e351a35..f97c2de7fe8cb9f0151dcb7e34bb624aa9dd1a38 100644 (file)
@@ -604,31 +604,40 @@ _st_create_shadow_material_from_actor (StShadow     *shadow_spec,
     {
       CoglHandle buffer, offscreen;
       ClutterActorBox box;
+      CoglColor clear_color;
       float width, height;
 
       clutter_actor_get_allocation_box (actor, &box);
       clutter_actor_box_get_size (&box, &width, &height);
 
+      if (width == 0 || height == 0)
+        return COGL_INVALID_HANDLE;
+
       buffer = cogl_texture_new_with_size (width,
                                            height,
                                            COGL_TEXTURE_NO_SLICING,
                                            COGL_PIXEL_FORMAT_ANY);
+
+      if (buffer == COGL_INVALID_HANDLE)
+        return COGL_INVALID_HANDLE;
+
       offscreen = cogl_offscreen_new_to_texture (buffer);
 
-      if (offscreen != COGL_INVALID_HANDLE)
+      if (offscreen == COGL_INVALID_HANDLE)
         {
-          CoglColor clear_color;
+          cogl_handle_unref (buffer);
+          return COGL_INVALID_HANDLE;
+        }
 
-          cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
-          cogl_push_framebuffer (offscreen);
-          cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
-          cogl_ortho (0, width, height, 0, 0, 1.0);
-          clutter_actor_paint (actor);
-          cogl_pop_framebuffer ();
-          cogl_handle_unref (offscreen);
+      cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
+      cogl_push_framebuffer (offscreen);
+      cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
+      cogl_ortho (0, width, height, 0, 0, 1.0);
+      clutter_actor_paint (actor);
+      cogl_pop_framebuffer ();
+      cogl_handle_unref (offscreen);
 
-          shadow_material = _st_create_shadow_material (shadow_spec, buffer);
-        }
+      shadow_material = _st_create_shadow_material (shadow_spec, buffer);
 
       cogl_handle_unref (buffer);
     }